/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package table.categoria;

import java.text.ParseException;
import java.util.List;
import javax.swing.table.AbstractTableModel;
import javax.swing.text.MaskFormatter;
import model.CategoriaMODEL;
import table.Pair;
import table.TooltipCellRender;

/**
 *
 * @author Welisson
 */
public class CategoriaTable extends AbstractTableModel {

    private static final int COL_ID = 0;
    private static final int COL_CORES = 1;
    private List<CategoriaMODEL> categorias;
    private TooltipCellRender renderer = new TooltipCellRender();

    public CategoriaTable(List<CategoriaMODEL> categorias) {
        this.categorias = categorias;
    }

    @Override
    public int getRowCount() {
        return categorias.size();
    }

    @Override
    public int getColumnCount() {
        return 2;
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        CategoriaMODEL categoria = categorias.get(rowIndex);

        if (columnIndex == COL_ID) {
            return new Pair<Integer, Integer>(categoria.getId(), categoria.getId());
        } else if (columnIndex == COL_CORES) {
            return new Pair<String, String>(categoria.getCategoria(), categoria.getCategoria());
        }

        return null;
    }

    @Override
    public String getColumnName(int column) {
        String coluna = "";
        switch (column) {
            case COL_ID:
                coluna = "id";
                break;
            case COL_CORES:
                coluna = "Categoria";
                break;
            default:
                throw new IllegalArgumentException("Coluna Inválida");
        }
        return coluna;
    }

    @Override
    public Class<?> getColumnClass(int columnIndex) {
        if (columnIndex == COL_ID) {
            return int.class;
        } else if (columnIndex == COL_CORES) {
            return String.class;
        }
        return null;
    }

    public CategoriaMODEL get(int row) {
        return categorias.get(row);
    }

    public Object get(int rowIndex, int columnIndex) {
        CategoriaMODEL forn = categorias.get(rowIndex);

        if (columnIndex == COL_ID) {
            return forn.getId();
        } else if (columnIndex == COL_CORES) {
            return forn.getCategoria();
//            return forn.getNome();
        }

        return null;
    }

    // Adiciona o sócio especificado ao modelo
    public void addCategoria(CategoriaMODEL categoria) {
        // Adiciona o registro.
        this.categorias.add(categoria);
        // Pega a quantidade de registros e subtrai 1 para
        // achar o último índice. A subtração é necessária
        // porque os índices começam em zero.
        int ultimoIndice = getRowCount() - 1;

        // Notifica a mudança.
        fireTableRowsInserted(ultimoIndice, ultimoIndice);
    }

    public void updateCategoria(int indiceLinha, CategoriaMODEL categoria) {
        this.categorias.set(indiceLinha, categoria);
        fireTableRowsUpdated(indiceLinha, indiceLinha);
    }

    // Remove o sócio da linha especificada.
    public void removeCategoria(int indiceLinha) {
        // Remove o registro.
        categorias.remove(indiceLinha);

        // Notifica a mudança.
        fireTableRowsDeleted(indiceLinha, indiceLinha);
    }

    private String format(String pattern, Object value) {
        MaskFormatter mask;
        try {
            mask = new MaskFormatter(pattern);
            mask.setValueContainsLiteralCharacters(false);
            return mask.valueToString(value);
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }
    }

}
